Python入门学习笔记

Python 入门学习笔记
一、变量和数据类型
  1. 整数,浮点数,字符串,布尔值,空值(None)
    • 布尔值可以用 and, or 和 not 运算
  1. print语句
    • print 字符串可以用”,”连接起来,中间会输出一个空格
    • 可用+拼接字符串,中间不会有空格
  1. 变量
    •  变量名必须是大小写英文、数字和下划线的组合,且不能用数字开头
    • 变量在计算机内存中的表示:当我们写 a = ‘ABC’ 时,Python解释器干了两件事情:1. 在内存中创建了一个 ’ABC’ 的字符串 2. 在内存中创建了一个名为a的变量,并把它指向 ’ABC’
  1. 字符串
    • 字符串既包含’又包含”的时候需要用到转义
  1. raw 字符串与多行字符串
    • 在字符串前加前缀 r 就表示这是一个raw字符串,里面的字符不需要转义
    • 表示多行字符串可用’’’......’’'
  1. Unicode 字符串
    • 在字符串前加前缀 u 来表示一个Unicode字符串
    • 如果中文字符串在 Python 环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以再第一行添加注释
# -*- coding: utf-8 -*-
                     目的是告诉Python解释器,用UTF-8编码读取源代码。
  1. 整数与浮点数
    • 整数运算结果仍是整数,浮点数运算结果仍然是浮点数,整数和浮点数混合运算的结果是浮点数
  1. 布尔类型
    • True 和 False
    • 0,空字符串’’,和None都是False
二、list 和 tuple
  1. list
    • list是有序集合
    • [1, 2, 3]
    • empty_list = []
    • 按索引访问,越界会报indexError
    • 访问倒数第几可用负几表示索引
    • 添加新元素用append()添加在最后,insert(index, value)添加在任何地方
    • 删除元素用pop()删除最后一个元素,用pop(index)删除任意元素
    • 替换元素直接将索引指向的值赋新的值
  1. tuple
    • tuple创建了就不可以修改
    • (1, 2, 3)
    • 但是tuple中如果有list,可以修改list中的元素,因为tuple只是引用不能修改,可以修改引用指向的值
    • 访问元素和list一样
    • 创建单元素tuple用(1,)在后面跟逗号的方式表示这是一个单元素tuple
三、条件判断和循环
  1. if
    • Python使用缩进规则,具有相同缩进的代码被视为代码块。缩进须严格按照Python的习惯写法:4个空格。
if ... :
    ...
elif ...:
    ...
else:
    ...

  1. for
    • 遍历list或tuple
for name in L:
    ...
  1. while
while ...:
    ...
    if ...:
        break
    if ...:
        continue
四、dict和set类型
  1. dict
    • 存储对应关系的键值对
d = {
    ‘Adam’: 95,
    ‘Lisa’: 85,
    ‘Bart’: 59
}
    • len()函数可以计算任意集合的大小
    • 通过key访问dict的value,只要key存在,dict就返回对应的value。如果key不存在会直接报错。对此有两种解决方法:1. 先判断一下key是否存在(if ‘Paul’ in d:)2. 使用dict的get方法(d.get(‘Paul’))如不存在则返回None
    • dict有三大特点:1. 查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样,但是dict占用内存大,还会浪费很多内容。dict是按key查找,所以key不能重复 2. dict存储的键值对是没有顺序的,所以打印的顺序不一定是创建时的顺序,而且不同机器打印的顺序可能不同。 3. 作为key的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为key。但是list是可变的,不能作为key。
    • 要往dict里添加新的键值对可以直接用赋值语句添加(d[‘Paul’] = 72),如果key已经存在,赋值会用新的value替换掉原来的value。
    • 遍历dict和遍历list一样都可用for循环遍历
  1. set
    • set的元素没有重复,而且是无序的。
    • 创建set的方式是调用set()并传入一个list,list的元素将作为set的元素。
    • 如果传入包含重复元素的list,set会自动去掉重复的元素。
    • 可用in操作符来判断set中是否包含某元素。(’Bart’ in s)
    • set有三大特点:1. set不存储value,因此判断一个元素是否在set中速度很快 2. set存储的元素和dict的key类似,必须是不变对象 3. set存储的元素也是没有顺序的
    • 添加元素用add()方法,如果添加的元素已经存在于set中,add()不会报错,只是不会加进去了。
    • 删除元素用remove()方法,如果删除的元素不在set中,remove()会报错。
五、函数
  1. 内置函数
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
  1. 编写函数
    • 定义一个函数用def语句,依次写出函数名、括号、括号中的参数和冒号,然后在缩进块中编写函数体,函数的返回值用return语句返回。
def my_abs(x):
    if x >= 0:
        return x
   else:
        return -x
    • 如果没有return语句,函数执行完毕后也会返回结果,结果为None。
  1. 返回多值
    • 可用tuple返回多值,在语法上,返回一个tuple可以省略括号,多个变量可以同时接收一个tuple,按位置赋给对应的值。
  1. 递归函数
    • 在函数内部可以调用其他函数,也可以在函数内部调用自身。
    • 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多会导致栈溢出。
  1. 默认参数
    • 定义函数的时候可以有默认参数,函数的默认参数的作用是简化调用。直接在写参数的时候给参数赋值就好。
  1. 可变参数
    • 如果想让一个函数能接受任意个参数,可以定义一个可变参数。
def fn(*args):
    print args
    • Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此在函数内部可以直接把变量args看成一个tuple。
六、切片
  1. 对list进行切片
    • 切片是从list中去几个元素出来
    • 从零开始取可写成L[:3],左闭右开,从零开始取到索引3位置,但不包括索引3.
    • 从某个索引开始,L[1,3]
    • 从头取到尾,L[:]
    • 切片操作还可指定第三个参数,表示每N个取一个。如L[::2]表示每两个元素取出一个来,也就是隔一个取一个。
    • list 和 tuple 的操作完全相同,只是 tuple 的切片结果也是tuple。
    • 也可用倒数索引进行切片
  1. 对字符串切片
    • 字符串切片结果仍是字符串。’ABCDEF’[:3] == ‘ABC’

七、迭代
  1. 迭代list
    • Python的for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。
    • 迭代操作就是对于一个集合,无论该集合有序还是无序,用for循环总是可以依次取出集合的每一个元素。
    • Python中,迭代永远是取出元素本身,而非元素的索引。想要在for循环中拿到索引,可以用enumerate()函数。
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
...
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
    • 实际上,enumerate()函数把 [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’] 变成了类似:[(0, ‘Adam’), (1, ‘Lisa), (2, ‘Bart’), (3, ‘Paul’)],因此迭代的每一个元素实际上是一个tuple
  1. 迭代dict
    • for循环可以迭代dict,每次拿到dict的一个key,但如果希望迭代dict对象的value,可以用values()方法,这个方法把dict转换成一个包含所有value的list。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.values()
# [85, 95, 59]
for v ind.values():
    print v
# 85
# 95
    • dict还有一个itervalues()方法,用这个方法替代values()方法,迭代效果完全一样。(py3中已取消此方法)
    • 两个方法的不同之处:1. values()方法实际上把一个dict转换成了包含value的list,而intervals()方法不会转换,它会在迭代过程中依次从dict中取出value,所以itervalues()方法比values()方法节省了生成list所需的内存。 2. 打印itervalues()发现它返回一个<dictionary-valueiterator>对象,这说明在Python中,for循环可作用的迭代对象远不止list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环。
    • 在一个for循环中同时迭代key和value可用items()方法。
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]

>>> for key, value in d.items():
...     print key, ':', value
...
Lisa : 85
Adam : 95
Bart : 59


八、列表生成式
  1. 生成列表
    • 循环生成列表可以写成[x * x for x in range(1,11)],来生成1-10每个数的平方的列表
  1. 复杂表达式
    • 使用for循环的迭代还可以迭代dict。
    • 可以通过一个复杂的列表生成式把dict变成一个HTML表格,字符串可以通过%进行格式化,用指定的参数替代%s。字符串的join()方法可以把一个list拼接成一个字符串。
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
  1. 条件过滤
    • 列表生成式的for循环后面还可以加上if判断
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
  1. 多层表达式
    • 在列表生成式中也可以用多层for循环来生成列表。
>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']